package com.tongtong.middleware.client;

import java.math.BigInteger;

import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import org.web3j.protocol.core.methods.response.EthBlock;

import com.tongtong.middleware.vo.params.AccountParams;
import com.tongtong.middleware.vo.params.MetaDataParams;
import com.tongtong.middleware.vo.params.bsn.RechargeRequest;
import com.tongtong.middleware.vo.params.erc1155.BurnNFTParams;
import com.tongtong.middleware.vo.params.erc1155.MintNFTParams;
import com.tongtong.middleware.vo.params.erc1155.TransferParams;
import com.tongtong.middleware.vo.params.nft.ApprovalParams;
import com.tongtong.middleware.vo.params.nft.BurnBatchNFTParams;
import com.tongtong.middleware.vo.params.nft.MetaDataByTokenIdParams;
import com.tongtong.middleware.vo.params.nft.MintBatchNFTParams;
import com.tongtong.middleware.vo.params.nft.Proposal;
import com.tongtong.middleware.vo.params.nft.TransferBatchParams;
import com.tongtong.middleware.vo.response.AccountBalanceRes;
import com.tongtong.middleware.vo.response.AccountResponse;
import com.tongtong.middleware.vo.response.EstimateGasRes;
import com.tongtong.middleware.vo.response.TransactionMergeData;

import lombok.extern.slf4j.Slf4j;
import xyz.xtt.common.response.ApiResult;

/**
 * @author wangqi
 */
@Slf4j
@Component
public class BlockchainClientFallbackFactory implements FallbackFactory<BlockchainClient> {

	@Override
	public BlockchainClient create(Throwable throwable) {
		return new BlockchainClient() {

			@Override
			public ApiResult<AccountResponse> createAndQueryAccount(AccountParams request) {
				return null;
			}

			@Override
			public ApiResult<BigInteger> getBlockNumber() {
				return null;
			}

			@Override
			public ApiResult<TransactionMergeData> getTransactionInfo(String hash) {
				return null;
			}

			@Override
			public ApiResult<BigInteger> getBalance(String account) {
				return null;
			}

			@Override
			public ApiResult<String> recharge(RechargeRequest request) {
				return null;
			}

			@Override
			public ApiResult<Double> balance() {
				return null;
			}

			@Override
			public ApiResult<EthBlock.Block> getBlockByNumber(BigInteger blockNumber) {
				return null;
			}

			@Override
			public ApiResult<AccountBalanceRes> mergeAccountBalance() {
				return null;
			}

			@Override
			public ApiResult<String> metadata(MetaDataParams request) {
				return null;
			}

			@Override
			public ApiResult<String> updateMetadataByTokenId(MetaDataByTokenIdParams request) {
				return null;
			}

			@Override
			public ApiResult<String> mintNFT(com.tongtong.middleware.vo.params.nft.MintNFTParams request) {
				return null;
			}

			@Override
			public ApiResult<String> mintBatchNFT(MintBatchNFTParams request) {
				return null;
			}

			@Override
			public ApiResult<String> transfer(com.tongtong.middleware.vo.params.nft.TransferParams request) {
				return null;
			}

			@Override
			public ApiResult<String> transferBatch(TransferBatchParams request) {
				return null;
			}

			@Override
			public ApiResult<String> approval(ApprovalParams request) {
				return null;
			}

			@Override
			public ApiResult<String> burnNFT(com.tongtong.middleware.vo.params.nft.BurnNFTParams request) {
				return null;
			}

			@Override
			public ApiResult<String> burnBatchNFT(BurnBatchNFTParams request) {
				return null;
			}

			@Override
			public ApiResult<String> tokenURI(Proposal proposal, BigInteger tokenId) {
				return null;
			}

			@Override
			public ApiResult<String> balanceOf(Proposal proposal, String account, BigInteger tokenId) {
				return null;
			}

			@Override
			public ApiResult<EstimateGasRes> estimateGas(String from, String to, String input) {
				return null;
			}

			@Override
			public ApiResult<String> erc721MintNFT(com.tongtong.middleware.vo.params.erc721.MintNFTParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc721Transfer(com.tongtong.middleware.vo.params.erc721.TransferParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc721BurnNFT(com.tongtong.middleware.vo.params.erc721.BurnNFTParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc721Approval(com.tongtong.middleware.vo.params.erc721.ApprovalParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc721BalanceOf(String account) {
				return null;
			}

			@Override
			public ApiResult<String> erc721IsApprovedForAll(String account, String operator) {
				return null;
			}

			@Override
			public ApiResult<String> erc721TokenURI(BigInteger tokenId) {
				return null;
			}

			@Override
			public ApiResult<String> erc721OwnerOf(BigInteger tokenId) {
				return null;
			}

			@Override
			public ApiResult<String> erc1155MintNFT(MintNFTParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc1155MintBatchNFT(com.tongtong.middleware.vo.params.erc1155.MintBatchNFTParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc1155Transfer(TransferParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc1155TransferBatch(com.tongtong.middleware.vo.params.erc1155.TransferBatchParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc1155Approval(com.tongtong.middleware.vo.params.erc1155.ApprovalParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc1155BurnNFT(BurnNFTParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc1155BurnBatchNFT(com.tongtong.middleware.vo.params.erc1155.BurnBatchNFTParams request) {
				return null;
			}

			@Override
			public ApiResult<String> erc1155BalanceOf(String account, BigInteger tokenId) {
				return null;
			}

			@Override
			public ApiResult<String> erc1155IsApprovedForAll(String account, String operator) {
				return null;
			}

			@Override
			public ApiResult<String> erc1155TokenURI(BigInteger tokenId) {
				return null;
			}

		};
	}
}